﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
//int main()
//{
//	//iscntrl --> 判断是否为控制字符
//	//printf("%d", iscntrl(' '));
//	//printf("%d", iscntrl('\a'));
//
//	//isspace --> 判断是否为空白字符
//	//printf("%d\n", isspace(' '));
//	//printf("%d\n", isspace('a'));
//
//	//isdigit --> 判断是否为数字
//	//printf("%d\n", isdigit('3'));
//	//printf("%d\n", isdigit(' '));
//
//	//islower --> 判断是否为小写字母
//	//printf("%d\n", islower('a'));
//	//printf("%d\n", islower('A'));
//
//	//isupper --> 判断是否为大写字母
//	//printf("%d\n", isupper('A'));
//	//printf("%d\n", isupper('a'));
//
//	//isalpha --> 判断是否为字母
//	//printf("%d\n", isalpha('a'));
//	//printf("%d\n", isalpha('3'));
//
//	//isalnum --> 判断是否为字母或数字
//	//printf("%d\n", isalnum('a'));
//	//printf("%d\n", isalnum('1'));
//	//printf("%d\n", isalnum(' '));
//
//	//ispunct --> 判断是否为标点符号
//	//printf("%d\n", ispunct(','));
//	//printf("%d\n", ispunct('a'));
//
//	//isgraph --> 判断是否为图形字符
//	//printf("%d\n", isgraph('@'));
//	//printf("%d\n", isgraph('\a'));
//
//	//isprint --> 判断是否为可打印字符
//	//printf("%d\n", isprint('a'));
//	//printf("%d\n", isprint(1));
//	
//	return 0;
//}

//写⼀个代码，将字符串中的⼩写字⺟转⼤写，其他字符不变
// 1.不使用库函数
//int main()
//{
//	char s[] = "Hello World";
//	int i = 0;
//
//	while (s[i] != '\0')
//	{
//		if (s[i] >= 'a' && s[i] <= 'z')
//		{
//			s[i] -= 32;
//		}
//		i++;
//	}
//	
//	printf("%s", s);
//	return 0;
//}

//2.使用库函数
//int main()
//{
//	char s[] = "Hello World";
//	int i = 0;
//
//	while (s[i] != '\0')
//	{
//		if (islower(s[i]))
//		{
//			s[i] = toupper(s[i]);
//		}
//		i++;
//	}
//	
//	printf("%s", s);
//	return 0;
//}

//strlen的使用和实现

////1.使用计数器
//size_t my_strlen(const char* s)
//{
//	assert(s != NULL);
//	size_t count = 0;
//	while (*s != '\0') //遍历直到字符串末尾
//	{
//		count++;
//		s++;
//	}
//	return count;
//}
////2.使用指针-指针
//size_t my_strlen(const char* s)
//{
//	assert(s != NULL);
//	char* t = s;
//	while (*t != '\0')
//	{
//		t++;
//	}
//	return t - s;
//}
////3.递归
////要算'abcdef'的长度,那么就是算1 + 'bcdef'的长度
////要算'bcdef'的长度，就是算1 +'cdef'的长度
////....
//size_t my_strlen(const char* s)
//{
//	if (*s == '\0')
//		return 0;
//	else
//		return 1 + my_strlen(++s);
//}

//int main()
//{
//	printf("%d", my_strlen("abcdef"));
//	return 0;
//}

//strcpy的使用和实现
//char* my_strcpy(char* destination, const char* source)
//{
//	assert(source && destination);
//	char* tmp = destination;
//	//进行复制
//	while (*source != '\0')
//	{
//		*destination = *source;
//		source++;
//		destination++;
//	}
//
//	*destination = *source;
//
//	return tmp;
//}

//char* my_strcpy(char* destination, const char* source)
//{
//	assert(source && destination);
//	char* tmp = destination; //因为destination会被更改，所以先保存目标字符串首地址，方便后面返回
//
//	//进行复制
//	//*destination++ = *source++ 简化代码
//	//放在while循环判断条件内，做到复制'\0'
//	while (*destination++ = *source++); 
//
//	return tmp;
//}
//
//int main()
//{
//	char s1[] = "hello world";
//	char s2[20] = " ";
//
//	char* ret = my_strcpy(s2, s1);
//
//	printf("%s\n", ret);
//
//	return 0;
//}

//strcat的使用和实现
//char* my_strcat(char* destination, const char* source)
//{
//	assert(destination && source);
//	char* tmp = destination;
//	//找到目标字符串的末尾
//	while (*destination != '\0')
//		destination++;
//
//	//追加源字符串到目标字符串后面
//	while (*destination++ = *source++);
//
//	return tmp;
//}

//int main()
//{
//	char s1[20] = "hello ";
//	char s2[] = "world";
//
//	char* ret = my_strcat(s1, s2);
//
//	printf("%s", ret);
//
//	return 0;
//}


